#include<stdio.h>
#include<unistd.h>
#include<pthread.h>
#include<stdlib.h>
#include<string.h>

extern void* func(void * arg);
int getNum(){
    int a= 100;
    return a;
}

//错误用法，返回局部变量的地址
void * getPtr(void *){
    int a = 100;
    return &a;
}


int main(){
    char msg[100] = "hello world!\n";
    pthread_t t1;
    // 创建一个新线程
    int res = pthread_create(&t1, NULL, func, (void*)msg);
    if(res ){
        perror("Thread creation failed");
        exit(-1);
    }
    // 定义一个指针，接收返回值
    char* result_msg ;
    // msg是数组的名字，本身是char*
    // 等待线程结束并获取返回值
    pthread_join(t1, (void**)&result_msg);
    printf("数组msg is %s\n", msg);
    printf("返回值为%s\n", result_msg);
    int res_num = getNum();
    printf("返回值为%d", res_num);
    return 0;
}

void * func(void * arg){
    // 将参数转换为字符指针
    char* msg1 = (char*)arg;
    // 使用memset函数将msg1指向的内存区域前100个字节全部置为0
    memset(msg1, 0, 100);
    // 使用strcpy函数将字符串"hello it heima!"复制到msg1指向的内存区域
    strcpy(msg1,"hello it heima!");
    // 使用pthread_exit函数退出线程，并将msg1作为返回值
    pthread_exit(msg1);
}

